package com.hcom.consumer;

import com.alibaba.fastjson2.JSON;
import com.hc.entity.NoticeArriva;
import com.hc.entity.User;
import com.hc.vo.OrderInfro;
import com.hcom.feignclient.QQSMSServerfeignClient;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.util.Date;

/**
 * @Description：
 * @Author：曹杰克
 * @CreateTime：2022/9/22 11:48
 */
@Component
public class MyConsumer {
    @Autowired
    QQSMSServerfeignClient qqsmsServerfeignClient;
    //处理消息可以添加三个参数
    // String str,      消息正文
    // Message message, 消息对象
    // Channel channel  信道
    @RabbitListener(queues="noticegoods")
    public void receiveTest(String str , Message message , Channel channel) throws IOException {
        NoticeArriva noticeArriva = JSON.parseObject(str, NoticeArriva.class);
        //对用户发送到货通知短信
        if(noticeArriva==null){  //实际可能是异常造成消息处理失败，可以用try{}catch{}的最后的fianlly{}来手动处理消息确认：选择重回队列还是进入死信队列
            System.out.println("消费消息确认失败，手动将队列中的该消息删除");
             //消费失败
            // long deliveryTag, boolean multiple, boolean requeue
            //boolean requeue:是否重回队列
            channel.basicNack(message.getMessageProperties().getDeliveryTag(),false,false);
            System.out.println("----------------");
        }else{
            System.out.println("消费成功，手动将队列中的该消息确认");
            //消费成功
            //long deliveryTag,     标记
            // boolean multiple     一次是否同时确认多条消息(比当前tag值小的消息一起确认)
            qqsmsServerfeignClient.senderMail(noticeArriva.getUser());
            System.out.println("发送邮件");
            channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
        }




    }



}
